﻿2026-08-28T15:28:57.0909297Z ##[group]Run python -m ruff check \
2026-08-28T15:28:57.0909922Z [36;1mpython -m ruff check \[0m
2026-08-28T15:28:57.0910393Z [36;1m  scripts/ci_portfolio_phase3_gate.py \[0m
2026-08-28T15:28:57.0910930Z [36;1m  src/jarvis_finance/api/main.py \[0m
2026-08-28T15:28:57.0911470Z [36;1m  src/jarvis_finance/api/routers/overview.py \[0m
2026-08-28T15:28:57.0912261Z [36;1m  src/jarvis_finance/api/routers/market.py \[0m
2026-08-28T15:28:57.0912888Z [36;1m  src/jarvis_finance/api/routers/system.py \[0m
2026-08-28T15:28:57.0913519Z [36;1m  src/jarvis_finance/api/schemas/manual_snapshot.py \[0m
2026-08-28T15:28:57.0914134Z [36;1m  src/jarvis_finance/api/schemas/market.py \[0m
2026-08-28T15:28:57.0914739Z [36;1m  src/jarvis_finance/api/schemas/portfolio_data.py \[0m
2026-08-28T15:28:57.0915426Z [36;1m  src/jarvis_finance/api/schemas/portfolio_performance.py \[0m
2026-08-28T15:28:57.0916135Z [36;1m  src/jarvis_finance/api/schemas/portfolio_policy.py \[0m
2026-08-28T15:28:57.0916838Z [36;1m  src/jarvis_finance/api/schemas/performance_activation.py \[0m
2026-08-28T15:28:57.0917803Z [36;1m  src/jarvis_finance/api/schemas/reconciliation.py \[0m
2026-08-28T15:28:57.0918454Z [36;1m  src/jarvis_finance/api/schemas/wealth_cockpit.py \[0m
2026-08-28T15:28:57.0919038Z [36;1m  src/jarvis_finance/api/security.py \[0m
2026-08-28T15:28:57.0919547Z [36;1m  src/jarvis_finance/cli/main.py \[0m
2026-08-28T15:28:57.0920064Z [36;1m  src/jarvis_finance/config/settings.py \[0m
2026-08-28T15:28:57.0920616Z [36;1m  src/jarvis_finance/ledger/cost_basis.py \[0m
2026-08-28T15:28:57.0921172Z [36;1m  src/jarvis_finance/ledger/performance.py \[0m
2026-08-28T15:28:57.0921739Z [36;1m  src/jarvis_finance/market/providers.py \[0m
2026-08-28T15:28:57.0922538Z [36;1m  src/jarvis_finance/quality/freshness.py \[0m
2026-08-28T15:28:57.0923104Z [36;1m  src/jarvis_finance/quality/git_safety.py \[0m
2026-08-28T15:28:57.0923726Z [36;1m  src/jarvis_finance/services/crypto_market_recovery.py \[0m
2026-08-28T15:28:57.0924447Z [36;1m  src/jarvis_finance/services/crypto_reconciliation.py \[0m
2026-08-28T15:28:57.0925107Z [36;1m  src/jarvis_finance/services/crypto_service.py \[0m
2026-08-28T15:28:57.0925700Z [36;1m  src/jarvis_finance/crypto/current_balances.py \[0m
2026-08-28T15:28:57.0926269Z [36;1m  src/jarvis_finance/api/routers/crypto.py \[0m
2026-08-28T15:28:57.0926906Z [36;1m  src/jarvis_finance/api/schemas/crypto_reconciliation.py \[0m
2026-08-28T15:28:57.0927609Z [36;1m  src/jarvis_finance/services/performance_activation.py \[0m
2026-08-28T15:28:57.0928243Z [36;1m  src/jarvis_finance/services/cash_service.py \[0m
2026-08-28T15:28:57.0928853Z [36;1m  src/jarvis_finance/services/household_import.py \[0m
2026-08-28T15:28:57.0929474Z [36;1m  src/jarvis_finance/services/modelled_wealth.py \[0m
2026-08-28T15:28:57.0930105Z [36;1m  src/jarvis_finance/services/asset_price_refresh.py \[0m
2026-08-28T15:28:57.0930748Z [36;1m  src/jarvis_finance/services/market_service.py \[0m
2026-08-28T15:28:57.0931401Z [36;1m  src/jarvis_finance/services/portfolio_analysis_v1.py \[0m
2026-08-28T15:28:57.0932355Z [36;1m  src/jarvis_finance/services/raiffeisen_manual_snapshot.py \[0m
2026-08-28T15:28:57.0933023Z [36;1m  src/jarvis_finance/services/system_ops.py \[0m
2026-08-28T15:28:57.0933622Z [36;1m  src/jarvis_finance/services/wealth_cockpit.py \[0m
2026-08-28T15:28:57.0934235Z [36;1m  src/jarvis_finance/services/portfolio_data.py \[0m
2026-08-28T15:28:57.0934889Z [36;1m  src/jarvis_finance/services/portfolio_performance.py \[0m
2026-08-28T15:28:57.0935554Z [36;1m  src/jarvis_finance/services/portfolio_policy.py \[0m
2026-08-28T15:28:57.0936243Z [36;1m  src/jarvis_finance/services/reconciliation_snapshot.py \[0m
2026-08-28T15:28:57.0936994Z [36;1m  src/jarvis_finance/services/truewealth_productization.py \[0m
2026-08-28T15:28:57.0937708Z [36;1m  src/jarvis_finance/services/truewealth_service.py \[0m
2026-08-28T15:28:57.0938385Z [36;1m  src/jarvis_finance/services/truewealth_valuation.py \[0m
2026-08-28T15:28:57.0939306Z [36;1m  src/jarvis_finance/services/transfer_pairing.py \[0m
2026-08-28T15:28:57.0939925Z [36;1m  src/jarvis_finance/storage/database.py \[0m
2026-08-28T15:28:57.0940494Z [36;1m  src/jarvis_finance/storage/migrations.py \[0m
2026-08-28T15:28:57.0941018Z [36;1m  tests/conftest.py \[0m
2026-08-28T15:28:57.0941486Z [36;1m  tests/unit/test_api_write_security.py \[0m
2026-08-28T15:28:57.0942254Z [36;1m  tests/unit/test_git_safety.py \[0m
2026-08-28T15:28:57.0942894Z [36;1m  tests/unit/test_portfolio_data_ingestion_reconciliation.py \[0m
2026-08-28T15:28:57.0943623Z [36;1m  tests/unit/test_portfolio_performance_foundation.py \[0m
2026-08-28T15:28:57.0944268Z [36;1m  tests/unit/test_portfolio_policy_foundation.py \[0m
2026-08-28T15:28:57.0944921Z [36;1m  tests/unit/test_reconciliation_snapshot_foundation.py \[0m
2026-08-28T15:28:57.0945536Z [36;1m  tests/unit/test_modelled_wealth.py \[0m
2026-08-28T15:28:57.0946071Z [36;1m  tests/unit/test_asset_price_refresh.py \[0m
2026-08-28T15:28:57.0946633Z [36;1m  tests/unit/test_portfolio_analysis_v1.py \[0m
2026-08-28T15:28:57.0947415Z [36;1m  tests/unit/test_raiffeisen_manual_snapshot.py \[0m
2026-08-28T15:28:57.0948054Z [36;1m  tests/unit/test_portfolio_market_analytics_v1.py \[0m
2026-08-28T15:28:57.0948650Z [36;1m  tests/unit/test_wealth_cockpit_v1.py \[0m
2026-08-28T15:28:57.0949226Z [36;1m  tests/unit/test_cash_truewealth_management.py \[0m
2026-08-28T15:28:57.0949778Z [36;1m  tests/unit/test_settings.py \[0m
2026-08-28T15:28:57.0950365Z [36;1m  tests/unit/test_sprint20d_truewealth_productization.py \[0m
2026-08-28T15:28:57.0951065Z [36;1m  tests/unit/test_sprint20d_truewealth_valuation.py \[0m
2026-08-28T15:28:57.0951726Z [36;1m  tests/unit/test_sprint20e_crypto_market_recovery.py \[0m
2026-08-28T15:28:57.0952574Z [36;1m  tests/unit/test_sprint20g1_crypto_reconciliation.py \[0m
2026-08-28T15:28:57.0953193Z [36;1m  tests/unit/test_transfer_pairing_v2.py[0m
2026-08-28T15:28:57.1005512Z shell: /usr/bin/bash -e {0}
2026-08-28T15:28:57.1005946Z env:
2026-08-28T15:28:57.1006263Z   PYTHONPATH: src
2026-08-28T15:28:57.1006616Z   JARVIS_FINANCE_ENV: test
2026-08-28T15:28:57.1007220Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-28T15:28:57.1008090Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-28T15:28:57.1008877Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-28T15:28:57.1009490Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-28T15:28:57.1010033Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.16/x64
2026-08-28T15:28:57.1010730Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.16/x64/lib/pkgconfig
2026-08-28T15:28:57.1011427Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.16/x64
2026-08-28T15:28:57.1012340Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.16/x64
2026-08-28T15:28:57.1012988Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.16/x64
2026-08-28T15:28:57.1013625Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.16/x64/lib
2026-08-28T15:28:57.1014170Z ##[endgroup]
2026-08-28T15:28:57.2153960Z All checks passed!
